package topic;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Provider {

    public static void main(String[] args) throws IOException, TimeoutException {
        /**
         * 逻辑:
         * 1. 创建工厂在工厂中选定要连接的Virtual Hosts的Connection对象
         * 2. 获得Connection对象的连接通道
         * 3. Connection对象绑定交换机
         * 4. 通过通道将消息发送给交换机
         */

        // 创建连接RabbitMQ的连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 设置连接RabbitMQ主机
        connectionFactory.setHost("192.168.99.100");
        // 设置端口号
        connectionFactory.setPort(5672);
        // 设置连接哪个Virtual Hosts
        connectionFactory.setVirtualHost("/wwj");
        // 设置访问Virtual Hosts的用户
        connectionFactory.setUsername("wwj");
        connectionFactory.setPassword("123456");

        // 获取连接对象(这里直接抛异常)
        Connection connection = connectionFactory.newConnection();

        // 获取连接通道
        Channel channel = connection.createChannel();

        // 将通道声明指定交换机
        // 参数一:交换机名称
        // 参数二:交换机类型
        channel.exchangeDeclare("log_topic", "topic");


        // 发布消息==>在这一步就把消息放入到消息队列中了
        // 参数一:交换机名称
        // 参数二:rountingKey
        // 参数三:传递消息额外配置 (暂不使用)
        // 参数四:消息的具体内容
        channel.basicPublish("log_topic", "wwj", null, "topic wwj".getBytes());
        channel.basicPublish("log_topic", "wwj.", null, "topic wwj.".getBytes());
        channel.basicPublish("log_topic", "wwj.abc", null, "topic wwj.abc".getBytes());
        channel.basicPublish("log_topic", "wwj.abc.abc", null, "topic wwj.abc.abc".getBytes());
        channel.basicPublish("log_topic", "abc.wwj", null, "topic abc.wwj".getBytes());


        // 关闭通道，关闭连接
        channel.close();
        connection.close();

    }

}
